package com.demo.backtemplate.mappers;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.demo.backtemplate.models.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 用户数据访问层
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {
    
    /**
     * 根据用户名查询用户
     * 
     * @param username 用户名
     * @return 用户对象，不存在则返回null
     */
    @Select("SELECT * FROM sys_user WHERE username = #{username}")
    User findByUsername(@Param("username") String username);
    
    /**
     * 根据用户名和角色查询用户
     * 
     * @param username 用户名
     * @param role 角色
     * @return 用户对象，不存在则返回null
     */
    @Select("SELECT * FROM sys_user WHERE username = #{username} AND role = #{role}")
    User findByUsernameAndRole(@Param("username") String username, @Param("role") String role);
    
    /**
     * 根据角色查询用户数量
     * 
     * @param role 角色
     * @return 用户数量
     */
    @Select("SELECT COUNT(*) FROM sys_user WHERE role = #{role}")
    Integer countByRole(@Param("role") String role);

    /**
     * 检查用户是否存在
     *
     * @param username 用户名
     * @return 存在则返回true，否则返回false
     */
    @Select("SELECT COUNT(*) FROM sys_user WHERE username = #{username}")
    boolean existsByUsername(@Param("username") String username);

    /**
     * 插入新用户
     *
     * @param user 用户对象
     * @return 插入成功则返回true，否则返回false
     */
    @Insert("INSERT INTO sys_user (username, password, real_name, phone, role) VALUES (#{username}, #{password}, #{realName}, #{phone}, #{role})")
    boolean insertUser(User user);
}